//  布尔值
// ts的类型注解
let flag = true;
// flag = 1
flag = false;
// 数字型
let num1 = 10;
let num2 = 0.5;
let num3 = -2;
//  字符串
var str1 = "hello";
str1 = "hi";
//  模板字符串 ``反引号 配合${}数据填充
let username = '张三';
let age = 20;
console.log(`我是${username},今年${age}岁`);
//undefined 和 null
let un = undefined;
let nu = null;
//变量定义了undefined和null类型，只能赋值该类型
let num4 = undefined;
let str2 = null;
//如果定义的变量类型需要做初始化或者显示未定义，可以将undefined，可以将undefined和null赋值给变量
//数组
//第一种定义数组方式，可以用数组符号[]进行定义，同时需要加上元素类型,数组元素赋值时必须使用定义的类型
let arr1 = [1, 2];
let arr2 = ['hi', 'hello'];
//第二种方式用数组泛型，Array<元素类型>
let arr3 = [true, false];
let arr4 = [1, 2, 3];
//元组，允许数组中的每个元素不必相同,但是元素类型的赋值必须符合定义的数据类型顺序进行赋值
let arr5 = [1, 'hi', true];
arr5 = [1, 'hello', true];
// any:泛型，支持所有的数据类型
let arr6 = ["hi", 1, false];
let allType = 5;
allType = 'hello';
allType = true;
//枚举， 为一组数据类型赋予友好的名字
var Color;
(function (Color) {
    Color[Color["Red"] = 1] = "Red";
    Color[Color["Blue"] = 2] = "Blue";
    Color[Color["Pink"] = 3] = "Pink";
})(Color || (Color = {}));
console.log(Color.Red, Color.Blue, Color.Pink); //0 1 2 编号
let myColor = Color[1];
console.log(myColor);
//编号默认从0开始，也可以自定义编号,如果只自定义一个编号，那么后面的编号就会依次递增，也可以每一个编号设置都不相同
//void 和 any 刚好相反，它表示没有任何类型，一般应用于没有函数返回值的情况
function test() {
    // return 1
    // return 'hello'
    // return null
    return undefined;
}
//object 表示非原始类型，也就是说除了number\string\boolean之外的类型
function test2(obj) {
    // return null
    // return 1
    // return {}
    return obj;
}
let fn = test2({ name: '张三', age: 20 });
console.log(fn);
//联合类型 可以选用多种类型，但是只能取一种类型
function test3(params) {
    console.log(params);
}
test3('hello');
test3(123);
test3(true);
//注意：联合类型在使用时，一定要注意参数的操作和返回值
function test4(params) {
    // return params.length
    return params.toString().length; //toString把数字转成字符串
}
console.log(test4(100));
//类型断言 数据类型的转换
//第一种使用尖括号进行转换<>
//第二种使用as语法进行转换
function test5(params) {
    //返回参数的字符串或数字的长度
    if (params.length) {
        return params.length;
    }
    else {
        return params.toString().length;
    }
}
console.log(test5(1000));
//类型推断
//TS在没有明确指定类型的时候，默认会推测出一个类型
let a = 123;
//a='hello'//变量在第一次赋值时，默认会推测为当前值的类型
a = 100;
//当变量定义了，但没有赋值，默认会推测为any类型
let b;
b = 456;
b = 'hi';
b = true;
b = [1, 2, 3];
